package practice;

import java.util.*;

/**
 * 信道分配
 */
public class ChannelAllot {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int R = scanner.nextInt(); // 最大阶数
        int[] Ni = new int[R + 1]; // 每种信道的数量
        for (int i = 0; i <= R; i++) {
            Ni[i] = scanner.nextInt();
        }
        int D = scanner.nextInt(); // 单个用户需要传输的数据量

        int count = 0; // 最多可以供多少用户传输数据
        Map<Integer, Integer> hashMap = new HashMap<>();

        // 用map存储对应的频道大小和数量
        for (int r = 0; r <= R; r++) {
            hashMap.put((int)Math.pow(2,r),Ni[r]);
        }

        // 大于等于用户需求时 直接分配
        for (Integer key: hashMap.keySet()) {
            if (key >= D) {
                count += hashMap.getOrDefault(key,0);
                hashMap.put(key,0);
            }
        }

        // 剩下加总和相加/用户需求
        int cap = 0;
        for (Integer key: hashMap.keySet()) {
            cap+=key*hashMap.getOrDefault(key,0);
        }
        count+=(cap/D);
        System.out.println(count);
    }
}
